package com.hmall.search.controller;


import com.hmall.common.domain.PageDTO;
import com.hmall.search.domain.po.ItemDoc;
import com.hmall.search.domain.query.ItemPageQuery;
import com.hmall.search.service.ISearchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * 依赖注入方式：
 * 成员变量注入：
 *      byType注入:@Autowired
 *      byName注入:@Resource
*  构造方法注入：
 *    类里需要有"有参构造"，不要再写无参构造：这样Spring在创建bean对象时，将不得不采用有参构造进行创建
 *     框架调用有参构造时，构造参数值会从IoC容器里查找并注入进来：byType注入
 *     存在问题：
 *       类里有几个final类型的变量，构造方法里就得有几个构造参数
 *       每增加一个final类型的变量，就需要调整构造方法，增加新的构造参数
*    解决方法：
 *      类里添加final类型的成员变量，类上加Lombok的@RequiredArgsConstructor注解
 *      注解会帮我们生成构造方法
 *
 *
 *
 */
@Api(tags = "搜索相关接口")
@RestController
@RequestMapping("/search")
@RequiredArgsConstructor
public class SearchController {

    private final ISearchService searchService;

    @ApiOperation("搜索商品")
    @GetMapping("/list")
    public PageDTO<ItemDoc> search(ItemPageQuery query) throws IOException {

        return searchService.search(query);
    }

}
